package com.ruoyi.common.utils.service;

import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.service.IService;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import org.apache.poi.ss.formula.functions.T;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * @Classname ServiceUtils
 * @Author: sunluquan
 * @Date: 2022/3/4 20:43
 * @Description TODO
 */
public class ServiceUtils {


    /**
     * 完善实体类属性
     * @param datas 源实体类列表
     * @param service 需要填充的实体类service对象
     * @param consumer service查询出来的数据循环回调对象
     * @param <T>
     * @param <U>
     */
    public static <T extends BaseEntity,U> void complete(Collection<U> datas, IService<T> service, BiConsumer<Map<? extends Serializable, T> ,U> consumer){
        if(StringUtils.isNotEmpty(datas)){
            Map<? extends Serializable, T> allMap = service.selectAllMap();
            datas.forEach(data->consumer.accept(allMap,data));
        }
    }

    /**
     * 将简单对象集合 转换为 bean对象
     * 并将简单对象值 填充至 bean对象属性中去
     * @param ts 简单的数据集合对象
     * @param tClass 需要转换的bean类型
     * @param teBiConsumer 填充内容逻辑
     * @param <T>
     * @param <E>
     * @return
     */
    public static <T,E extends Serializable> List<T> toBeanList(Collection<E> ts, Class<T> tClass, BiConsumer<T,E> teBiConsumer){
        List<T> tList = new ArrayList<>();
        if(StringUtils.isNotEmpty(ts)){
            ts.forEach(e->{
                T t = BeanUtils.initialize(tClass);
                tList.add(t);
                teBiConsumer.accept(t,e);
            });
        }
        return tList;
    }
}
